Questão 3 - HCPA 2020 - ANALISTA DE TI (DESENVOLVIMENTO)
questão 3 consulta sql
Confira abaixo a resposta da questão sobre consulta SQL com o uso de JOIN, COUNT, WHERE, GROUP BY, HAVING nas alternativas.
Considere as tabelas aip_pacientes e agh_atendimentos abaixo:
[COLOCAR IMAGEM]
No SGBD Oracle, a consulta que retorna o nome do aip_pacientes e a quantidade de agh_atendimentos para pacientes que tiveram mais de 10 agh_atendimentos no hospital é:
(A) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT(*) > 10
(B) SELECT nome FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT(*) > 10 GROUP BY codigo
(C) SELECT nome, count(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY nome HAVING COUNT(*) >10
(D) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND QUANTIDADE > 10 GROUP BY codigo
(E) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY codigo HAVING QUANTIDADE >10
Vamos analisar cada opção:
(A) SELECT nome, COUNT() AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT() > 10: Esta consulta tem um problema na cláusula WHERE. Não é possível usar COUNT(*) diretamente na cláusula WHERE. Além disso, falta a cláusula GROUP BY para agrupar por nome e contar a quantidade de atendimentos.
(B) SELECT nome FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND COUNT(*) > 10 GROUP BY codigo: Nesta consulta, falta a função de agregação COUNT(*) na seleção dos campos, e a cláusula GROUP BY não está corretamente configurada para calcular a contagem de atendimentos.
(C) SELECT nome, count() AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY nome HAVING COUNT() >10: Esta consulta está correta. Ela seleciona o nome dos pacientes, realiza um join entre as tabelas aip_pacientes e agh_atendimentos, agrupa os resultados pelo nome do paciente, conta a quantidade de atendimentos para cada paciente e aplica a condição HAVING para filtrar apenas aqueles com mais de 10 atendimentos.
(D) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo AND QUANTIDADE > 10 GROUP BY codigo: Esta consulta tenta usar a variável QUANTIDADE na cláusula WHERE, o que não é possível. Além disso, falta a cláusula HAVING para aplicar a condição de contagem.
(E) SELECT nome, COUNT(*) AS QUANTIDADE FROM aip_pacientes, agh_atendimentos WHERE codigo = pac_codigo GROUP BY codigo HAVING QUANTIDADE >10: Aqui, também há tentativa de usar a variável QUANTIDADE na cláusula HAVING sem ser definida na consulta. Além disso, a contagem deveria ser feita pelo nome do paciente, não pelo código.
Portanto, a única opção correta é a (C).
O assunto principal abordado na questão é o uso de JOIN, GROUP BY, COUNT, WHERE e HAVING em consultas SQL para filtrar e agrupar dados de múltiplas tabelas. Para dominar esse assunto, é fundamental compreender como usar corretamente essas cláusulas para obter os resultados desejados.
Leia mais em: onteudo.portalfaurgs.com.br/a...